"""
date: 2018-7-30
function: 对目录下的指定扩展名文件进行统计。
"""
import os
count = 0   # 统计匹配的文件数。


def file(path, type):
    """
    function: 搜索到指定文件就计数。
    """
    global count
    if path[-len(type):] == type:
        count += 1
    pass


def dir(path, type):
    """
    function: 使用递归搜索目录下不确定数量的目录。
    """
    paths = os.listdir(path)
    for p in paths:
        temp = combine(path, p)
        if os.path.isdir(temp):
            dir(temp, type)
        elif os.path.isfile(temp):
            file(temp, type)
    pass


def combine(path, sub):
    """
    function: 将指定路径和目录下的目录或文件进行合并成一个完成的路径。
    """
    return path + '/' + sub


def main(path, file_type):
    """
    function: 主题。
    """
    global count
    if os.path.isdir(path):
        paths = os.listdir(path)
        for p in paths:
            count = 0           # 每次对新目录都对计数器归零。
            temp = combine(path, p)
            if temp == '/usr/lib/llvm-4.0':
                continue
            if os.path.isdir(temp):
                dir(temp, file_type)
                if count > 0:
                    print('%s dir sum : %d' % (temp, count))
            elif os.path.isfile(p):
                file(p, file_type)
                pass
        pass
    else:
        print('you must set a dirctory')
    pass


if __name__ == '__main__':
    path = 'D:\Program Files\Python37'            # 指定路径。
    file_type = '.py'                    # 指定文件类型。
    if path[len(path)-1] == '/':
        path = path[0:len(path) - 1]
    print(path)
    main(path, file_type)
    pass